package com.zjl.redis.第18章_五大数据类型和源码解析;

/**
 * redis 7 中新有的
 * hash-max-listpack-entries 512
 * hash-max-listpack-value 64
 * 和之前的 ziplist 是同步更新的，
 *
 * ziplist 为了节省内存，采用了紧凑的连续存储。
 * ziplist 是一个双向链表，可以在时间复杂度为O(1)下从头部、尾部进行pop或push。
 *      新增或更新元素可能会出现连锁更新现象(致命缺点导致被 listpack 替换)。******************
 * 不能保存过多的元素，否则查询效率就会降低，数量小和内容小的情况下可以使用。
 *
 *
 * listpack 结构：
 *   ————————————————————————————————————————————————————————————————
 *   | total_bytes | size |  entry1 | entry2 | ... | entryN | end  |
 *   ————————————————————————————————————————————————————————————————
 *      1.total_bytes  整个列表占用字节数
 *      2.size         元素个数
 *      3.entry1
 *           encoding        记录content的类型和长度
 *           content         实际数据
 *           lenth           encoding + content
 *      4.end          结尾标识
 *
 *  istpack 记录当前节点的长度，当我们向 listpack 加入一个新元素的时候，
 *      不会影响其他节点的长度字段的变化，从而避免了压缩列表的连锁更新问题。
 *  listpack 一样可以支持从后往前遍历的。
 *      listpack中的lpDecodeBacklen 函数就可以从当前列表项起始位置的指针开始，
 *      向左逐个字节解析，得到前一项的 entry-len 值。
 *
 *
 */
public class B8_紧凑列表listpack {

}
